package org.googlecode.viewt.core.dao.ibatis;

import java.util.List;

import org.googlecode.viewt.core.contant.IConstant;
import org.googlecode.viewt.core.dao.DAOPerformException;
import org.googlecode.viewt.core.dao.IDAO;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

public abstract class AbstractIbatisBaseDAO extends SqlMapClientDaoSupport implements
		IDAO {
	// private IAppContext context;
	private String owner;

	// private String dbCfgUrl;
	//
	// public AbstractBaseDAO() {
	// this.context = null;
	//
	// this.owner = null;
	//
	// this.dbCfgUrl = null;
	// }

	public String getOwner() {
		return this.owner;
	}

	public void setOwner(String owner) {
		this.owner = owner;
	}
	
	
	public List<IConstant> listNamedQuery(String paramString) throws DAOPerformException {
		// TODO Auto-generated method stub
		return null;
	}

	// public String getDBCfgUrl() {
	// return this.dbCfgUrl;
	// }
	//
	// public void setDBCfgUrl(String dbCfgUrl) {
	// this.dbCfgUrl = StringUtil.replaceSeparator(StringUtil
	// .replaceEnv(dbCfgUrl));
	// }
	//
	public boolean needConvertCS() {
		// try {
		// DbConfig dbCfg = getConvertConfig();
		// if ((dbCfg != null) && (dbCfg.hasConvCharset()))
		// return dbCfg.getConvCharset();
		// } catch (CharsetConvertException csEx) {
		// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
		// .warn("Get db config fail, use default value instead");
		// }

		return false;
	}

	// DbConfig getConvertConfig() throws CharsetConvertException {
	// DbConfig dbCfg = null;
	// try {
	// dbCfg = DBConfigRepository.getDbConfig(this.dbCfgUrl);
	// } catch (ResourceNotFoundException rnfEx) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog.error(
	// "Db config file:" + this.dbCfgUrl
	// + " not found, convert charset fail", rnfEx);
	// throw new CharsetConvertException("Db config file:" + this.dbCfgUrl
	// + " not found, convert charset fail", rnfEx);
	// } catch (ResourceFailException rfEx) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .error("Load db config from file:" + this.dbCfgUrl
	// + " fail", rfEx);
	// throw new CharsetConvertException("Load db config from file:"
	// + this.dbCfgUrl + " fail", rfEx);
	// }
	//	
	// if ((dbCfg.hasConvCharset()) && (dbCfg.getConvCharset())
	// && (dbCfg.getDbCharset() == null)) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .error("Database charset not specified, check file:"
	// + this.dbCfgUrl);
	// throw new CharsetConvertException(
	// "Database charset not specified, check file:"
	// + this.dbCfgUrl);
	// }
	//	
	// return dbCfg;
	// }
	//
	// TODO refactor converCStoLoal not finished.
//	public Object convertCSToLocal(Object obj) throws CharsetConvertException {
//		return convertCSToLocal(obj, false);
//	}
//
//	public Object convertCSToLocal(Object obj, boolean recursive)
//			throws CharsetConvertException {
//		// DbConfig dbCfg = getConvertConfig();
//		//
//		// if (dbCfg.getLocalCharset() != null) {
//		// return POCharsetConverter.convert(obj, dbCfg.getDbCharset(), dbCfg
//		// .getLocalCharset(), recursive);
//		// }
//		// return POCharsetConverter.convert(obj, dbCfg.getDbCharset(),
//		// recursive);
//		return obj;
//	}
//
//	// TODO conver the javaobject file code to local db code?
//	public Object convertCSToRemote(Object obj) throws CharsetConvertException {
//		return convertCSToRemote(obj, false);
//	}
//
//	public Object convertCSToRemote(Object obj, boolean recursive)
//			throws CharsetConvertException {
//		// DbConfig dbCfg = getConvertConfig();
//
//		// if (dbCfg.getLocalCharset() != null) {
//		// return POCharsetConverter.convert(obj, dbCfg.getLocalCharset(),
//		// dbCfg.getDbCharset(), recursive);
//		// }
//		// return POCharsetConverter.convert(obj, System
//		// .getProperty("file.encoding"), dbCfg.getDbCharset(), recursive);
//		return obj;
//	}

	// public IAppContext getContext() {
	// return this.context;
	// }
	//	
	// public void setContext(IAppContext context) {
	// this.context = context;
	// }

//	public HibernateTemplate getHBTemplate() {
//		return getHibernateTemplate();
//	}
//
//	public Session getHBSession() {
//		return getSession();
//	}
//
//	public SessionFactory getHBSessionFactory() {
//		return getSessionFactory();
//	}
//
//	public void releaseHBSession(Session session) {
//		releaseSession(session);
//	}
	
	
	

	// protected NamedSqlConfig getSqlDef(String queryName)
	// throws DAOPerformException {
	// try {
	// return SqlConfigRepository.getSqlConfig(queryName);
	// } catch (ResourceNotFoundException rnfEx) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog.error(
	// "Named SQL:" + queryName + " not found", rnfEx);
	// throw new DAOPerformException("Named SQL:" + queryName
	// + " not found", rnfEx);
	// } catch (ResourceFailException rfEx) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog.error(
	// "Load named SQL:" + queryName + " fail", rfEx);
	// throw new DAOPerformException("Load named SQL:" + queryName
	// + " fail", rfEx);
	// }
	// }
	//
	// public List listNamedQuery(String queryName) throws DAOPerformException {
	// return listNamedQuery(queryName, -1, null, false);
	// }
	//
	// public List listNamedQuery(String queryName, int fetchSize,
	// FlushMode flushMode, boolean readOnly) throws DAOPerformException {
	// return listNamedQuery(queryName, 0, -1, fetchSize, flushMode, readOnly);
	// }
	//
	// public List listNamedQuery(String queryName, int firstResult, int
	// maxResults)
	// throws DAOPerformException {
	// return listNamedQuery(queryName, firstResult, maxResults, -1, null,
	// false);
	// }
	//
	// public List listNamedQuery(String queryName, int firstResult,
	// int maxResults, int fetchSize, FlushMode flushMode, boolean readOnly)
	// throws DAOPerformException {
	// return listNamedQuery(getContext(), queryName, firstResult, maxResults,
	// fetchSize, flushMode, readOnly);
	// }
	//
	// public List listNamedQuery(IAppContext queryCtx, String queryName)
	// throws DAOPerformException {
	// return listNamedQuery(queryCtx, queryName, -1, null, false);
	// }
	//
	// public List listNamedQuery(IAppContext queryCtx, String queryName,
	// int fetchSize, FlushMode flushMode, boolean readOnly)
	// throws DAOPerformException {
	// return listNamedQuery(queryCtx, queryName, 0, -1, fetchSize, flushMode,
	// readOnly);
	// }
	//
	// public List listNamedQuery(IAppContext queryCtx, String queryName,
	// int firstResult, int maxResults) throws DAOPerformException {
	// return listNamedQuery(queryCtx, queryName, firstResult, maxResults, -1,
	// null, false);
	// }
	//
	// public List listNamedQuery(IAppContext queryCtx, String queryName,
	// int firstResult, int maxResults, int fetchSize,
	// FlushMode flushMode, boolean readOnly) throws DAOPerformException {
	// if (this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .isDebugEnabled()) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .debug("Begin list named query:" + queryName);
	// }
	//
	// NamedSqlConfig sqlConfig = getSqlDef(queryName);
	// QueryDef queryDef = sqlConfig.getQueryDef();
	// NativeQueryDef nativeDef = sqlConfig.getNativeQueryDef();
	// if ((queryDef == null) && (nativeDef == null)) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .error("Named SQL:" + queryName + " is not query");
	// throw new DAOPerformException("Named SQL:" + queryName
	// + " is not query");
	// }
	//
	// try {
	// if (queryDef != null) {
	// return ((List) getHibernateTemplate().execute(
	// new HibernateCallback(queryDef, firstResult,
	// maxResults, fetchSize, flushMode, readOnly,
	// queryCtx) {
	// private final QueryDef val$queryDef;
	// private final int val$firstResult;
	// private final int val$maxResults;
	// private final int val$fetchSize;
	// private final FlushMode val$flushMode;
	// private final boolean val$readOnly;
	// private final IAppContext val$queryCtx;
	//
	// public Object doInHibernate(Session session)
	// throws HibernateException {
	// Query query = session
	// .createQuery(this.val$queryDef
	// .getSqlString());
	// AbstractBaseDAO.this.prepareQuery(query,
	// this.val$queryDef,
	// this.val$firstResult,
	// this.val$maxResults,
	// this.val$fetchSize, this.val$flushMode,
	// this.val$readOnly);
	// try {
	// AbstractBaseDAO.this.applyParameters(
	// this.val$queryCtx, query,
	// this.val$queryDef.getParam());
	// } catch (VTLEvaluateFailException evalEx) {
	// AbstractBaseDAO.this.logger
	// .error(
	// "Evaluate parameter for hibernate query fail",
	// evalEx);
	// throw new HibernateException(
	// "Evaluate parameter for hibernate query fail",
	// evalEx);
	// } catch (CharsetConvertException csEx) {
	// AbstractBaseDAO.this.logger
	// .error(
	// "Convert charset of named SQL fail",
	// csEx);
	// throw new HibernateException(
	// "Convert charset of named SQL fail",
	// csEx);
	// }
	//
	// return query.list();
	// }
	// }, true));
	// }
	//
	// return ((List) getHibernateTemplate().execute(
	// new HibernateCallback(nativeDef, firstResult, maxResults,
	// fetchSize, flushMode, readOnly, queryCtx) {
	// private final NativeQueryDef val$nativeDef;
	// private final int val$firstResult;
	// private final int val$maxResults;
	// private final int val$fetchSize;
	// private final FlushMode val$flushMode;
	// private final boolean val$readOnly;
	// private final IAppContext val$queryCtx;
	//
	// public Object doInHibernate(Session session)
	// throws HibernateException {
	// SQLQuery nativeQuery = null;
	// if ((this.val$nativeDef.hasCallable())
	// && (this.val$nativeDef.getCallable())) {
	// nativeQuery = NativeQueryHelper.createSQLQuery(
	// this.val$nativeDef.getSqlString(),
	// new ArrayList(), new ArrayList(), null,
	// null, true,
	// (SessionImplementor) session);
	// } else {
	// nativeQuery = session
	// .createSQLQuery(this.val$nativeDef
	// .getSqlString());
	// }
	// AbstractBaseDAO.this.prepareNativeQuery(
	// nativeQuery, this.val$nativeDef,
	// this.val$firstResult, this.val$maxResults,
	// this.val$fetchSize, this.val$flushMode,
	// this.val$readOnly);
	// try {
	// AbstractBaseDAO.this.applyParameters(
	// this.val$queryCtx, nativeQuery,
	// this.val$nativeDef.getParam());
	// } catch (VTLEvaluateFailException evalEx) {
	// AbstractBaseDAO.this.logger
	// .error(
	// "Evaluate parameter for native SQL query fail",
	// evalEx);
	// throw new HibernateException(
	// "Evaluate parameter for native SQL query fail",
	// evalEx);
	// } catch (CharsetConvertException csEx) {
	// AbstractBaseDAO.this.logger.error(
	// "Convert charset of named SQL fail",
	// csEx);
	// throw new HibernateException(
	// "Convert charset of named SQL fail",
	// csEx);
	// }
	//
	// return nativeQuery.list();
	// }
	// }, true));
	// } catch (HibernateException hibernateEx) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog.error(
	// "Hibernate execute fail when perform named query:"
	// + queryName, hibernateEx);
	// throw new DAOPerformException(
	// "Hibernate execute fail when perform named query:"
	// + queryName, hibernateEx);
	// }
	// }
	//
	// public List listQuery(String sqlStr) throws DAOPerformException {
	// return listQuery(sqlStr, -1, null, false);
	// }
	//
	// public List listQuery(String sqlStr, int fetchSize, FlushMode flushMode,
	// boolean readOnly) throws DAOPerformException {
	// return listQuery(sqlStr, 0, -1, fetchSize, flushMode, readOnly);
	// }
	//
	// public List listQuery(String sqlStr, int firstResult, int maxResults)
	// throws DAOPerformException {
	// return listQuery(sqlStr, firstResult, maxResults, -1, null, false);
	// }
	//
	// public List listQuery(String sqlStr, int firstResult, int maxResults,
	// int fetchSize, FlushMode flushMode, boolean readOnly)
	// throws DAOPerformException {
	// return listQuery(getContext(), sqlStr, firstResult, maxResults,
	// fetchSize, flushMode, readOnly);
	// }
	//
	// public List listQuery(IAppContext queryCtx, String sqlStr)
	// throws DAOPerformException {
	// return listQuery(queryCtx, sqlStr, -1, null, false);
	// }
	//
	// public List listQuery(IAppContext queryCtx, String sqlStr, int fetchSize,
	// FlushMode flushMode, boolean readOnly) throws DAOPerformException {
	// return listQuery(queryCtx, sqlStr, 0, -1, fetchSize, flushMode,
	// readOnly);
	// }
	//
	// public List listQuery(IAppContext queryCtx, String sqlStr, int
	// firstResult,
	// int maxResults) throws DAOPerformException {
	// return listQuery(queryCtx, sqlStr, firstResult, maxResults, -1, null,
	// false);
	// }
	//
	// public List listQuery(IAppContext queryCtx, String sqlStr, int
	// firstResult,
	// int maxResults, int fetchSize, FlushMode flushMode, boolean readOnly)
	// throws DAOPerformException {
	// if (this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .isDebugEnabled()) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .debug("Begin list hibernate query:" + sqlStr);
	// }
	// try {
	// return ((List) getHibernateTemplate().execute(
	// new HibernateCallback(sqlStr, firstResult, maxResults,
	// fetchSize, flushMode, readOnly, queryCtx) {
	// private final String val$sqlStr;
	// private final int val$firstResult;
	// private final int val$maxResults;
	// private final int val$fetchSize;
	// private final FlushMode val$flushMode;
	// private final boolean val$readOnly;
	// private final IAppContext val$queryCtx;
	//
	// public Object doInHibernate(Session session)
	// throws HibernateException {
	// Query query = session.createQuery(this.val$sqlStr);
	// AbstractBaseDAO.this.prepareQuery(query,
	// this.val$firstResult, this.val$maxResults,
	// this.val$fetchSize, this.val$flushMode,
	// this.val$readOnly);
	// try {
	// AbstractBaseDAO.this.applyContextParameters(
	// this.val$queryCtx, query);
	// } catch (CharsetConvertException csEx) {
	// AbstractBaseDAO.this.logger
	// .error(
	// "Convert charset of hibernate query fail",
	// csEx);
	// throw new HibernateException(
	// "Convert charset of hibernate query fail",
	// csEx);
	// }
	//
	// return query.list();
	// }
	// }, true));
	// } catch (HibernateException hibernateEx) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog.error(
	// "Hibernate execute fail when perform hibernate query:"
	// + sqlStr, hibernateEx);
	// throw new DAOPerformException(
	// "Hibernate execute fail when perform hibernate query:"
	// + sqlStr, hibernateEx);
	// }
	// }
	//
	// protected Object evalParamValue(String exp) throws
	// VTLEvaluateFailException {
	// return evalParamValue(getContext(), exp);
	// }
	//
	// protected Object evalParamValue(IAppContext evalCtx, String exp)
	// throws VTLEvaluateFailException {
	// return VTLEngineHelper.evalValueExp(evalCtx, exp);
	// }
	//
	// protected void setParameter(Query query, String name, Object value,
	// String type) throws CharsetConvertException {
	// if (value != null) {
	// if (type != null) {
	// if (("BigDecimal".equals(type))
	// || ("java.math.BigDecimal".equals(type))) {
	// if (value instanceof BigDecimal)
	// query.setBigDecimal(name, (BigDecimal) value);
	// else
	// query.setBigDecimal(name, new BigDecimal(value
	// .toString()));
	// } else if (("BigInteger".equals(type))
	// || ("java.math.BigInteger".equals(type))) {
	// if (value instanceof BigInteger)
	// query.setBigInteger(name, (BigInteger) value);
	// else
	// query.setBigInteger(name, new BigInteger(value
	// .toString()));
	// } else if (("boolean".equals(type)) || ("Boolean".equals(type))
	// || ("java.lang.Boolean".equals(type))) {
	// if (value instanceof Boolean)
	// query
	// .setBoolean(name, ((Boolean) value)
	// .booleanValue());
	// else
	// query.setBoolean(name, Boolean.getBoolean(value
	// .toString()));
	// } else if (("byte".equals(type)) || ("Byte".equals(type))
	// || ("java.lang.Byte".equals(type))) {
	// if (value instanceof Byte)
	// query.setByte(name, ((Byte) value).byteValue());
	// else
	// query.setByte(name, Byte.parseByte(value.toString()));
	// } else if (("double".equals(type)) || ("Double".equals(type))
	// || ("java.lang.Double".equals(type))) {
	// if (value instanceof Double)
	// query.setDouble(name, ((Double) value).doubleValue());
	// else
	// query.setDouble(name, Double.parseDouble(value
	// .toString()));
	// } else if (("float".equals(type)) || ("Float".equals(type))
	// || ("java.lang.Float".equals(type))) {
	// if (value instanceof Float)
	// query.setFloat(name, ((Float) value).floatValue());
	// else
	// query
	// .setFloat(name, Float.parseFloat(value
	// .toString()));
	// } else if (("int".equals(type)) || ("Integer".equals(type))
	// || ("java.lang.Integer".equals(type))) {
	// if (value instanceof Integer)
	// query.setInteger(name, ((Integer) value).intValue());
	// else
	// query.setInteger(name, Integer.parseInt(value
	// .toString()));
	// } else if (("long".equals(type)) || ("Long".equals(type))
	// || ("java.lang.Long".equals(type))) {
	// if (value instanceof Long)
	// query.setLong(name, ((Long) value).longValue());
	// else
	// query.setLong(name, Long.parseLong(value.toString()));
	// } else if (("short".equals(type)) || ("Short".equals(type))
	// || ("java.lang.Short".equals(type))) {
	// if (value instanceof Short)
	// query.setShort(name, ((Short) value).shortValue());
	// else
	// query
	// .setShort(name, Short.parseShort(value
	// .toString()));
	// } else if (("date".equals(type)) || ("Date".equals(type))
	// || ("java.util.Date".equals(type))) {
	// if (value instanceof Date)
	// query.setDate(name, (Date) value);
	// else
	// query.setDate(name, DateUtil.stringToDate(value
	// .toString()));
	// } else if (("string".equals(type)) || ("String".equals(type))
	// || ("java.lang.String".equals(type))) {
	// String paramValue = null;
	//
	// if (value instanceof String)
	// paramValue = (String) value;
	// else if (value instanceof Date)
	// paramValue = DateUtil.datetimeToString((Date) value);
	// else {
	// paramValue = value.toString();
	// }
	//
	// if (needConvertCS()) {
	// paramValue = (String) convertCSToRemote(paramValue);
	// }
	// query.setString(name, paramValue);
	// } else if (value instanceof Collection) {
	// query.setParameterList(name, (Collection) value);
	// } else if (value instanceof Object[]) {
	// query.setParameterList(name, (Object[]) value);
	// } else {
	// query.setParameter(name, value);
	// }
	//
	// } else {
	// query.setParameter(name, value);
	// }
	//
	// } else
	// query.setParameter(name, value);
	// }
	//
	// protected void applyContextParameters(Query query)
	// throws CharsetConvertException {
	// applyContextParameters(getContext(), query);
	// }
	//
	// protected void applyContextParameters(IAppContext queryCtx, Query query)
	// throws CharsetConvertException {
	// if (queryCtx == null) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .info("Context is empty, can not apply query parameter from context");
	// return;
	// }
	//
	// String[] names = queryCtx.getAttrNames();
	// int size = (names == null) ? 0 : names.length;
	// for (int i = 0; i < size; ++i) {
	// Object paramValue = queryCtx.getAttr(names[i]);
	// setParameter(query, names[i], paramValue, null);
	//
	// if (this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .isDebugEnabled())
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .debug("Context parameter:" + names[i] + ", value="
	// + paramValue);
	// }
	// }
	//
	// protected void applyParameters(Query query, Param[] params)
	// throws VTLEvaluateFailException, CharsetConvertException {
	// applyParameters(getContext(), query, params);
	// }
	//
	// protected void applyParameters(IAppContext queryCtx, Query query,
	// Param[] params) throws VTLEvaluateFailException,
	// CharsetConvertException {
	// int size = (params == null) ? 0 : params.length;
	// for (int i = 0; i < size; ++i) {
	// Object value = evalParamValue(queryCtx, params[i].getExpression());
	// setParameter(query, params[i].getName(), value, params[i]
	// .getJavaType());
	//
	// if (this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .isDebugEnabled())
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .debug("Query parameter:"
	// + params[i].getName()
	// + " evaluated, value="
	// + value
	// + ", class:"
	// + ((value == null) ? "null" : value.getClass()
	// .getName()));
	// }
	// }
	//
	// protected void prepareUpdate(Query query) {
	// prepareUpdate(query, null);
	// }
	//
	// protected void prepareUpdate(Query query, BulkUpdateDef updateDef) {
	// SessionFactoryUtils.applyTransactionTimeout(query, getSessionFactory());
	// }
	//
	// protected void prepareQuery(Query query, int firstResult, int maxResults,
	// int fetchSize, FlushMode flushMode, boolean readOnly) {
	// prepareQuery(query, null, firstResult, maxResults, fetchSize,
	// flushMode, readOnly);
	// }
	//
	// protected void prepareQuery(Query query, QueryDef queryDef,
	// int firstResult, int maxResults, int fetchSize,
	// FlushMode flushMode, boolean readOnly) {
	// HibernateTemplate template = getHibernateTemplate();
	//
	// if (template.isCacheQueries()) {
	// query.setCacheable(true);
	// if (template.getQueryCacheRegion() != null) {
	// query.setCacheRegion(template.getQueryCacheRegion());
	// }
	// }
	//
	// SessionFactoryUtils.applyTransactionTimeout(query, getSessionFactory());
	//
	// if (firstResult > 0) {
	// query.setFirstResult(firstResult);
	// }
	//
	// if (maxResults > 0) {
	// query.setMaxResults(maxResults);
	// } else if ((queryDef != null) && (queryDef.hasMaxResults())
	// && (queryDef.getMaxResults() > 0)) {
	// query.setMaxResults(queryDef.getMaxResults());
	// } else if (template.getMaxResults() > 0) {
	// query.setMaxResults(template.getMaxResults());
	// }
	//
	// if (fetchSize > 0) {
	// query.setFetchSize(fetchSize);
	// } else if (template.getFetchSize() > 0) {
	// query.setFetchSize(template.getFetchSize());
	// }
	//
	// if (flushMode != null) {
	// query.setFlushMode(flushMode);
	// }
	//
	// if (readOnly == true) {
	// query.setReadOnly(true);
	// } else {
	// if ((queryDef == null) || (!(queryDef.hasReadOnly())))
	// return;
	// query.setReadOnly(queryDef.getReadOnly());
	// }
	// }
	//
	// protected void prepareNativeQuery(SQLQuery nativeQuery,
	// NativeQueryDef nativeDef, int firstResult, int maxResults,
	// int fetchSize, FlushMode flushMode, boolean readOnly) {
	// HibernateTemplate template = getHibernateTemplate();
	//
	// if (template.isCacheQueries()) {
	// nativeQuery.setCacheable(true);
	// if (template.getQueryCacheRegion() != null) {
	// nativeQuery.setCacheRegion(template.getQueryCacheRegion());
	// }
	// }
	//
	// SessionFactoryUtils.applyTransactionTimeout(nativeQuery,
	// getSessionFactory());
	//
	// if (firstResult > 0) {
	// nativeQuery.setFirstResult(firstResult);
	// }
	//
	// if (maxResults > 0) {
	// nativeQuery.setMaxResults(maxResults);
	// } else if ((nativeDef.hasMaxResults())
	// && (nativeDef.getMaxResults() > 0)) {
	// nativeQuery.setMaxResults(nativeDef.getMaxResults());
	// } else if (template.getMaxResults() > 0) {
	// nativeQuery.setMaxResults(template.getMaxResults());
	// }
	//
	// if (fetchSize > 0) {
	// nativeQuery.setFetchSize(fetchSize);
	// } else if (template.getFetchSize() > 0) {
	// nativeQuery.setFetchSize(template.getFetchSize());
	// }
	//
	// if (flushMode != null) {
	// nativeQuery.setFlushMode(flushMode);
	// }
	//
	// if (readOnly == true) {
	// nativeQuery.setReadOnly(true);
	// } else if (nativeDef.hasReadOnly()) {
	// nativeQuery.setReadOnly(nativeDef.getReadOnly());
	// }
	//
	// if (nativeDef.getNativeQueryChoice() == null)
	// return;
	// ReturnAlias[] aliases = nativeDef.getNativeQueryChoice()
	// .getReturnAlias();
	// ReturnScalar[] scalars = nativeDef.getNativeQueryChoice()
	// .getReturnScalar();
	// for (int i = 0; i < aliases.length; ++i)
	// nativeQuery.addEntity(aliases[i].getAlias(), aliases[i].getClazz());
	// for (int i = 0; i < scalars.length; ++i)
	// nativeQuery.addScalar(scalars[i].getColumn(), TypeFactory
	// .heuristicType(scalars[i].getType()));
	// }
	//
	// public Iterator iterateNamedQuery(String queryName)
	// throws DAOPerformException {
	// return iterateNamedQuery(queryName, -1, null, false);
	// }
	//
	// public Iterator iterateNamedQuery(String queryName, int fetchSize,
	// FlushMode flushMode, boolean readOnly) throws DAOPerformException {
	// return iterateNamedQuery(queryName, 0, -1, fetchSize, flushMode,
	// readOnly);
	// }
	//
	// public Iterator iterateNamedQuery(String queryName, int firstResult,
	// int maxResults) throws DAOPerformException {
	// return iterateNamedQuery(queryName, firstResult, maxResults, -1, null,
	// false);
	// }
	//
	// public Iterator iterateNamedQuery(String queryName, int firstResult,
	// int maxResults, int fetchSize, FlushMode flushMode, boolean readOnly)
	// throws DAOPerformException {
	// return iterateNamedQuery(getContext(), queryName, firstResult,
	// maxResults, fetchSize, flushMode, readOnly);
	// }
	//
	// public Iterator iterateNamedQuery(IAppContext queryCtx, String queryName)
	// throws DAOPerformException {
	// return iterateNamedQuery(queryCtx, queryName, -1, null, false);
	// }
	//
	// public Iterator iterateNamedQuery(IAppContext queryCtx, String queryName,
	// int fetchSize, FlushMode flushMode, boolean readOnly)
	// throws DAOPerformException {
	// return iterateNamedQuery(queryCtx, queryName, 0, -1, fetchSize,
	// flushMode, readOnly);
	// }
	//
	// public Iterator iterateNamedQuery(IAppContext queryCtx, String queryName,
	// int firstResult, int maxResults) throws DAOPerformException {
	// return iterateNamedQuery(queryCtx, queryName, firstResult, maxResults,
	// -1, null, false);
	// }
	//
	// public Iterator iterateNamedQuery(IAppContext queryCtx, String queryName,
	// int firstResult, int maxResults, int fetchSize,
	// FlushMode flushMode, boolean readOnly) throws DAOPerformException {
	// if (this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .isDebugEnabled()) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .debug("Begin iterate named query:" + queryName);
	// }
	//
	// NamedSqlConfig sqlConfig = getSqlDef(queryName);
	// QueryDef queryDef = sqlConfig.getQueryDef();
	// NativeQueryDef nativeDef = sqlConfig.getNativeQueryDef();
	// if ((queryDef == null) && (nativeDef == null)) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .error("Named SQL:" + queryName + " is not query");
	// throw new DAOPerformException("Named SQL:" + queryName
	// + " is not query");
	// }
	//
	// try {
	// if (queryDef != null) {
	// return ((Iterator) getHibernateTemplate().execute(
	// new HibernateCallback(queryDef, firstResult,
	// maxResults, fetchSize, flushMode, readOnly,
	// queryCtx) {
	// private final QueryDef val$queryDef;
	// private final int val$firstResult;
	// private final int val$maxResults;
	// private final int val$fetchSize;
	// private final FlushMode val$flushMode;
	// private final boolean val$readOnly;
	// private final IAppContext val$queryCtx;
	//
	// public Object doInHibernate(Session session)
	// throws HibernateException {
	// Query query = session
	// .createQuery(this.val$queryDef
	// .getSqlString());
	// AbstractBaseDAO.this.prepareQuery(query,
	// this.val$queryDef,
	// this.val$firstResult,
	// this.val$maxResults,
	// this.val$fetchSize, this.val$flushMode,
	// this.val$readOnly);
	// try {
	// AbstractBaseDAO.this.applyParameters(
	// this.val$queryCtx, query,
	// this.val$queryDef.getParam());
	// } catch (VTLEvaluateFailException evalEx) {
	// AbstractBaseDAO.this.logger
	// .error(
	// "Evaluate parameter for hibernate query fail",
	// evalEx);
	// throw new HibernateException(
	// "Evaluate parameter for hibernate query fail",
	// evalEx);
	// } catch (CharsetConvertException csEx) {
	// AbstractBaseDAO.this.logger
	// .error(
	// "Convert charset of named SQL fail",
	// csEx);
	// throw new HibernateException(
	// "Convert charset of named SQL fail",
	// csEx);
	// }
	//
	// return query.iterate();
	// }
	// }, true));
	// }
	//
	// return ((Iterator) getHibernateTemplate().execute(
	// new HibernateCallback(nativeDef, firstResult, maxResults,
	// fetchSize, flushMode, readOnly, queryCtx) {
	// private final NativeQueryDef val$nativeDef;
	// private final int val$firstResult;
	// private final int val$maxResults;
	// private final int val$fetchSize;
	// private final FlushMode val$flushMode;
	// private final boolean val$readOnly;
	// private final IAppContext val$queryCtx;
	//
	// public Object doInHibernate(Session session)
	// throws HibernateException {
	// SQLQuery nativeQuery = null;
	// if ((this.val$nativeDef.hasCallable())
	// && (this.val$nativeDef.getCallable())) {
	// nativeQuery = NativeQueryHelper.createSQLQuery(
	// this.val$nativeDef.getSqlString(),
	// new ArrayList(), new ArrayList(), null,
	// null, true,
	// (SessionImplementor) session);
	// } else {
	// nativeQuery = session
	// .createSQLQuery(this.val$nativeDef
	// .getSqlString());
	// }
	// AbstractBaseDAO.this.prepareNativeQuery(
	// nativeQuery, this.val$nativeDef,
	// this.val$firstResult, this.val$maxResults,
	// this.val$fetchSize, this.val$flushMode,
	// this.val$readOnly);
	// try {
	// AbstractBaseDAO.this.applyParameters(
	// this.val$queryCtx, nativeQuery,
	// this.val$nativeDef.getParam());
	// } catch (VTLEvaluateFailException evalEx) {
	// AbstractBaseDAO.this.logger
	// .error(
	// "Evaluate parameter for native SQL query fail",
	// evalEx);
	// throw new HibernateException(
	// "Evaluate parameter for native SQL query fail",
	// evalEx);
	// } catch (CharsetConvertException csEx) {
	// AbstractBaseDAO.this.logger.error(
	// "Convert charset of named SQL fail",
	// csEx);
	// throw new HibernateException(
	// "Convert charset of named SQL fail",
	// csEx);
	// }
	//
	// return nativeQuery.iterate();
	// }
	// }, true));
	// } catch (HibernateException hibernateEx) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog.error(
	// "Hibernate execute fail when perform named query:"
	// + queryName, hibernateEx);
	// throw new DAOPerformException(
	// "Hibernate execute fail when perform named query:"
	// + queryName, hibernateEx);
	// }
	// }
	//
	// public int namedBulkUpdate(String updateName) throws DAOPerformException
	// {
	// return namedBulkUpdate(getContext(), updateName);
	// }
	//
	// public int namedBulkUpdate(IAppContext updateCtx, String updateName)
	// throws DAOPerformException {
	// if (this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .isDebugEnabled()) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .debug("Begin perform named bulk update:" + updateName);
	// }
	//
	// NamedSqlConfig sqlConfig = getSqlDef(updateName);
	// BulkUpdateDef updateDef = sqlConfig.getBulkUpdateDef();
	// if (updateDef == null) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .error("Named SQL:" + updateName
	// + " is not bulk update/delete");
	// throw new DAOPerformException("Named SQL:" + updateName
	// + " is not bulk update/delete");
	// }
	//
	// try {
	// Integer count = (Integer) getHibernateTemplate().execute(
	// new HibernateCallback(updateDef, updateCtx) {
	// private final BulkUpdateDef val$updateDef;
	// private final IAppContext val$updateCtx;
	//
	// public Object doInHibernate(Session session)
	// throws HibernateException {
	// Query query = session
	// .createQuery(this.val$updateDef
	// .getSqlString());
	// AbstractBaseDAO.this.prepareUpdate(query,
	// this.val$updateDef);
	// try {
	// AbstractBaseDAO.this.applyParameters(
	// this.val$updateCtx, query,
	// this.val$updateDef.getParam());
	// } catch (VTLEvaluateFailException evalEx) {
	// AbstractBaseDAO.this.logger
	// .error(
	// "Evaluate parameter for bulk update fail",
	// evalEx);
	// throw new HibernateException(
	// "Evaluate parameter for bulk update fail",
	// evalEx);
	// } catch (CharsetConvertException csEx) {
	// AbstractBaseDAO.this.logger.error(
	// "Convert charset of named SQL fail",
	// csEx);
	// throw new HibernateException(
	// "Convert charset of named SQL fail",
	// csEx);
	// }
	//
	// return new Integer(query.executeUpdate());
	// }
	// }, true);
	//
	// return count.intValue();
	// } catch (HibernateException hibernateEx) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog.error(
	// "Hibernate execute fail when perform named bulk update:"
	// + updateName, hibernateEx);
	// throw new DAOPerformException(
	// "Hibernate execute fail when perform named bulk update:"
	// + updateName, hibernateEx);
	// }
	// }
	//
	// public int bulkUpdate(String updateSql) throws DAOPerformException {
	// return bulkUpdate(getContext(), updateSql);
	// }
	//
	// public int bulkUpdate(IAppContext updateCtx, String updateSql)
	// throws DAOPerformException {
	// if (this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .isDebugEnabled()) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog
	// .debug("Begin perform hibernate bulk update:" + updateSql);
	// }
	// try {
	// Integer count = (Integer) getHibernateTemplate().execute(
	// new HibernateCallback(updateSql, updateCtx) {
	// private final String val$updateSql;
	// private final IAppContext val$updateCtx;
	//
	// public Object doInHibernate(Session session)
	// throws HibernateException {
	// Query query = session
	// .createQuery(this.val$updateSql);
	// AbstractBaseDAO.this.prepareUpdate(query);
	// try {
	// AbstractBaseDAO.this.applyContextParameters(
	// this.val$updateCtx, query);
	// } catch (CharsetConvertException csEx) {
	// AbstractBaseDAO.this.logger
	// .error(
	// "Convert charset of hibernate bulk update fail",
	// csEx);
	// throw new HibernateException(
	// "Convert charset of hibernate bulk update fail",
	// csEx);
	// }
	//
	// return new Integer(query.executeUpdate());
	// }
	// }, true);
	//
	// return count.intValue();
	// } catch (HibernateException hibernateEx) {
	// this.jdField_logger_of_type_OrgApacheCommonsLoggingLog.error(
	// "Hibernate execute fail when perform hibernate bulk update:"
	// + updateSql, hibernateEx);
	// throw new DAOPerformException(
	// "Hibernate execute fail when perform hibernate bulk update:"
	// + updateSql, hibernateEx);
	// }
	// }
}